﻿@{
    // Initialiser les variables de la page générale
    var login_popupregister = "";
    var email_popupregister = "";
    var password_popupregister = "";
    var confirmPassword_popupregister = "";

    // Validation de l’installation
    Validation.RequireField("login_popupregister", "Vous devez spécifier un identifiant");
    Validation.RequireField("email_popupregister", "Vous devez spécifier une adresse de messagerie.");
    Validation.RequireField("password_popupregister", "Le mot de passe ne peut pas être vide.");
    Validation.Add("confirmPassword",
        Validator.EqualsTo("password_popupregister", "Le mot de passe et le mot de passe de confirmation ne correspondent pas."));
    Validation.Add("password",
        Validator.StringLength(
            maxLength: Int32.MaxValue,
            minLength: 6,
            errorMessage: "Le mot de passe doit inclure au moins six caractères"));
    // S’il s’agit d’une demande POST , valider et traiter les données
    if (IsPost)
    {
        AntiForgery.Validate();
        login_popupregister = Request.Form["login_popupregister"];
        email_popupregister = Request.Form["email_popupregister"];
        password_popupregister = Request.Form["password_popupregister"];
        confirmPassword_popupregister = Request.Form["confirmPassword_popupregister"];

        // Si toutes les informations sont valides, créer un compte
        if (Validation.IsValid())
        {
            // Insérer un nouvel utilisateur dans la base de données
            var dbcontext = new alguillet_ExpenseManagerEntities();
            bool check_mail_exists = (dbcontext.Members.Where(user => user.Email == email_popupregister).Count() > 0);

            if (!check_mail_exists)
            {
                bool check_username_exists = (dbcontext.Members.Where(user => user.Login == login_popupregister).Count() > 0);
                if (!check_username_exists)
                {
                    var members = dbcontext.Members;
                    Member mber = new Member();
                    mber.Email = email_popupregister;
                    mber.Login = login_popupregister;


                    members.Add(mber);
                    var success = dbcontext.SaveChanges();

                    if (success >= 1)
                    {
                        // Revenir à la page d’accueil et quitter
                        WebSecurity.CreateAccount(login_popupregister, password_popupregister, false);
                        WebSecurity.Login(email_popupregister, password_popupregister);
                        Response.Redirect("~/");
                    }
                    else
                    {
                        ModelState.AddFormError("Une erreur est survenue.");
                    }
                }
                else
                {
                    // L’utilisateur existe déjà
                    ModelState.AddFormError("Cet identifiant est déjà utilisé");
                }
            }
            else
            {
                // L’utilisateur existe déjà
                ModelState.AddFormError("L'adresse mail est déjà utilisée");
            }
        }
    }
}
<form method="post" id="inscriptionform">
@AntiForgery.GetHtml()
@* S’il existe au moins une erreur de validation, en avertir l’utilisateur *@
@Html.ValidationSummary("Échec de la création du compte. Corrigez les erreurs et réessayez.", excludeFieldErrors: true, htmlAttributes: null)
<fieldset>
    <legend>Formulaire d’inscription</legend>
    <ol>
        <li class="login">
            <label for="login_popupregister" @if (!ModelState.IsValidField("login_popupregister")){<text>class="error-label"</text>}>
                Identifiant</label>
            <input type="text" id="login_popupregister" name="login_popupregister" value="@login_popupregister" @Validation.For("login_popupregister") />
            @* Écrire les erreurs de validation de l'identifiant *@
            @Html.ValidationMessage("login_popupregister")
        </li>
        <li class="email">
            <label for="email_popupregister" @if (!ModelState.IsValidField("email_popupregister"))
                               {<text>class="error-label"</text>}>
                Adresse de messagerie</label>
            <input type="text" id="email_popupregister" name="email_popupregister" value="@email_popupregister" @Validation.For("email_popupregister") />
            @* Écrire les erreurs de validation de la messagerie électronique sur la page *@
            @Html.ValidationMessage("email_popupregister")
        </li>
        <li class="password">
            <label for="password_popupregister" @if (!ModelState.IsValidField("password_popupregister"))
                                  {<text>class="error-label"</text>}>
                Mot de passe</label>
            <input type="password" id="password_popupregister" name="password_popupregister" @Validation.For("password_popupregister") />
            @* Écrire les erreurs de validation du mot de passe sur la page *@
            @Html.ValidationMessage("password_popupregister")
        </li>
        <li class="confirm-password">
            <label for="confirmPassword_popupregister" @if (!ModelState.IsValidField("confirmPassword_popupregister"))
                                         {<text>class="error-label"</text>}>
                Confirmer le mot de passe</label>
            <input type="password" id="confirmPassword_popupregister" name="confirmPassword_popupregister" @Validation.For("confirmPassword_popupregister") />
            @* Écrire les erreurs de validation du mot de passe sur la page *@
            @Html.ValidationMessage("confirmPassword_popupregister")
        </li>
    </ol>
    <input type="submit" value="Register" />
</fieldset>
</form>
